package com.linianda.JavaSE.JavaWeb.JavaWeb笔记;

public class Session笔记 {
    /** 什么是Session
     * Session也是服务器的一种会话技术，服务器在运行的时候可以为每一个用户的数据去创建一个单独的Session对象
     * Session可以为用户浏览器所独享的。所以当在访问Web资源的时候，可以把各自的数据保存在格子的Session中
     *
     * Session的核心类 HttpSession接口 在服务器端保存会话的数据
     * 可以通过req.getSession()获取HttpSession接口
     *
     * getId():获取到Session的一个编号
     * invalidate()通过此方法可以销毁Session对象
     * setAttribute(java.lang.String name , java.lang.Object value ) 向Session中保存数据
     * getAttribute(java.lang.String name) 根据name获取Session对象
     * removeAttribute(java.lang.String name)清除数据 可以在退出登录的时候调用此方法
     *
     * Session执行原理
     * 1.第一次会创建一个Session对象，会给Session对象分配一个唯一的ID（JSESSIONID）
     * 2.要将SESSIONID作为Cookie的值发送给浏览器来保存的。
     * 3.第二次访问服务端的时候，浏览器会携带JESSIONID的cookie来访问服务器
     * 4.服务器要得到JSESSIONID，在服务器的内存中搜索是否存在对应的Session对象
     *
     * session中的数据可以被多个jsp以及servlet共享的，如果是request就不可以
     *
     * 注意：保存在Session中的数据会被多个Servlet或Jsp共享，只要浏览器不关闭，那么保存在session中的数据会一直有效（重要）
     */

//    public class SessionDemo extends HttpServlet {
//        @Override
//        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//            resp.setContentType("text/html;charset=utf-8");
//            PrintWriter out = resp.getWriter();
//            //如何获取Session对象
//            HttpSession session = req.getSession();
//            //向session中保存数据
//            session.setAttribute("name","tom123");
//            //从session中获取数据
//            String name = (String) session.getAttribute("name");
//            out.println("JESSIONID"+session.getId()+"----"+name);
//
//            //手动向客户端写Cookie
////        Cookie cookie= new Cookie("JSESSION",session.getId());
////        cookie.setMaxAge(1*30*24*60*60);
////        resp.addCookie(cookie);`
//
//        }
}
